package faktorI;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class DijalogOpazanje extends JDialog {

	private JButton dugme, dugmeZaPomoc;
	private JTextField polje;
	private Opazanje opazanje;
	private Iterator iterator;
	private JTextArea textPolje;
	
	public DijalogOpazanje() {
		super(FaktorIRadnaPovrs.instanca().dohvatiMenadzera(), "Definisanje faktora izvesnosti za opažanje", true);
		setLayout(new FlowLayout());
		setSize(700, 100);
		setResizable(false);
		setLocationRelativeTo(null);
		LstPrav.instanca().popuniListuOpazanja();
		FaktorIRadnaPovrs.instanca().dohvatiPrikaz(1).setText(LstOpaz.instanca().toString());
		
		iterator = new Iterator(LstOpaz.instanca());
		opazanje = (Opazanje)iterator.first();
		
		if(opazanje != null){
			textPolje = new JTextArea(2,20);
			textPolje.setText("" + opazanje.getNaziv());
			textPolje.setFont(Font.decode("Arial-15"));
			textPolje.setBackground(Color.getColor(null));
			JScrollPane scrollPane = new JScrollPane(textPolje); 
			textPolje.setEditable(false);
			add(scrollPane);
			add(polje = new JTextField(6));
			polje.setFont(Font.decode("Arial-15"));
			polje.setText("" + opazanje.getOperand().getFaktorI());
			add(dugme = new JButton("Unesi faktor izvesnosti",new ImageIcon(Toolkit.getDefaultToolkit().getImage(
				"files/icons/insert.JPG"))));
			dugme.setFont(Font.decode("Serif-ITALIC-15"));
			add(dugmeZaPomoc = new JButton(new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/help.JPG"))));
			dugmeZaPomoc.setFont(Font.decode("Serif-ITALIC-15"));
			addListeners();
		}
		else{
			throw new Greska("Ne postoji nijedno opazanje!" +
					"\nProverite ispravnost unetih pravila.");
		}
	}
	private void addListeners(){
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				if (LstOpaz.instanca().prazna())
					prikaziObavestenje();
				if (FaktorIRadnaPovrs.instanca().startnoStanjeKompletno()){
					FaktorIRadnaPovrs.instanca().dohvatiMenadzera().dozvoliNaPocetak();
					FaktorIRadnaPovrs.instanca().dohvatiTaster(3).setEnabled(true);
					FaktorIRadnaPovrs.instanca().dohvatiPrikaz(3).requestFocus();
				}
			}

			public void windowClosed(WindowEvent we) {
				if (FaktorIRadnaPovrs.instanca().startnoStanjeKompletno()){
					FaktorIRadnaPovrs.instanca().dohvatiMenadzera().dozvoliNaPocetak();
					FaktorIRadnaPovrs.instanca().dohvatiTaster(3).setEnabled(true);
					FaktorIRadnaPovrs.instanca().dohvatiPrikaz(3).requestFocus();
				}
			}
		});
		
		dugme.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				if(obradaFaktoraI(polje) != 2){
					opazanje.setFaktorI(obradaFaktoraI(polje));
					LstPrav.instanca().updateOpazanja(opazanje);
					opazanje = (Opazanje)iterator.next();
						if(opazanje != null){
							textPolje.setText(opazanje.getNaziv());
							polje.setText("" + opazanje.getOperand().getFaktorI());
							polje.requestFocus();
						}
						else{
							dispose();
						}
					FaktorIRadnaPovrs.instanca().dohvatiPrikaz(1).setText(LstOpaz.instanca().toString());
				}
			}
		});
		
		
		polje.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent ke) {
				if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
					if(obradaFaktoraI(polje) != 2){
						opazanje.setFaktorI(obradaFaktoraI(polje));
						LstPrav.instanca().updateOpazanja(opazanje);
						opazanje = (Opazanje)iterator.next();
							if(opazanje != null){
								textPolje.setText(opazanje.getNaziv());
								polje.setText("" + opazanje.getOperand().getFaktorI());
								polje.requestFocus();
							}
							else{
								dispose();
							}
						FaktorIRadnaPovrs.instanca().dohvatiPrikaz(1).setText(LstOpaz.instanca().toString());
					}
				}
			}
		});
		
		dugmeZaPomoc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				PomocOSimulatoru.instanca().prikazi(5);
				}
			});
	}
	private double obradaFaktoraI(JTextField polje){
		double faktor = 2;
		try{
		 faktor = Double.parseDouble(polje.getText());
		 	if(faktor > 1 || faktor < -1){
			 String popravka = "0.";
			 popravka += polje.getText();
			 faktor = Double.parseDouble(popravka);
		 	}
		}catch(NumberFormatException e){
			if("".equals(polje.getText()))
				new GreskaD(FaktorIRadnaPovrs.instanca().dohvatiMenadzera(), "Niste uneli faktor izvesnosti!");
			else 
				new GreskaD(FaktorIRadnaPovrs.instanca().dohvatiMenadzera(), "Niste pravilno uneli faktor izvesnosti!");
		}
		if(faktor > 1 || faktor < -1)
			return 2;
		else
			return faktor;
	} 
	
	private void prikaziObavestenje() {
		JOptionPane.showMessageDialog(this,
				"Morate definisati pravila, opažanja i zaključak\n"
						+ " da bi se simulacija mogla pokrenuti!",
				"Obaveštenje", JOptionPane.INFORMATION_MESSAGE);
	}
}
